package pt.iscte.daam.ejb;

import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceContextType;
import javax.transaction.Transactional;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import pt.iscte.daam.common.Constantes;
import pt.iscte.daam.json.PedidoJson;
import pt.iscte.daam.model.Imovel;
import pt.iscte.daam.model.Senhorio;
import pt.iscte.daam.servicos.Servicos;

@Stateless
@LocalBean
@Path("/imovel")
public class ServicoImovel {
	@PersistenceContext(unitName = Constantes.persistenceContextUnitName, type = PersistenceContextType.TRANSACTION)
	EntityManager entityManager;

	@POST
	@Path(Servicos.listaImoveisPorUtilizador)
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)
	public Imovel[] getListaImoveisPorUtilizador(PedidoJson pedido) {
		Senhorio procura = entityManager.find(Senhorio.class,
				pedido.getUtilizador());

		if (procura != null) {
			return procura.getImoveis().toArray(new Imovel[0]);
		}

		return new Imovel[0];
	}

	@POST
	@Transactional
	@Path(Servicos.inserirImovel)
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)
	public Imovel inserirImovel(PedidoJson pedido) {
		Senhorio senhorio = entityManager.find(Senhorio.class,
				pedido.getUtilizador());
		Imovel imovel = new Imovel();

		imovel.setSenhorio(senhorio);
		imovel.setConselho(pedido.getConselho());
		imovel.setDetalhe(pedido.getDetalhe());
		imovel.setDistrito(pedido.getDistrito());
		imovel.setLocalidade(pedido.getLocalidade());
		imovel.setPais(pedido.getPais());

		senhorio.adicionaImovel(imovel);
		entityManager.persist(imovel);

		return imovel;
	}
}